package com.jdd.modules.parking.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jdd.common.api.vo.Result;
import com.jdd.modules.parking.entity.ParkArmInfo;
import com.jdd.modules.parking.entity.ParkWorkStation;
import com.jdd.modules.parking.vo.ParkWorkStationVo;

import java.util.List;

/**
 * @Description: 工作站
 * @Author: jdd
 * @Date: 2021-11-05
 * @Version: V1.0
 */
public interface IParkWorkStationService extends IService<ParkWorkStation> {

    /**
     * 添加工作站
     *
     * @param parkWorkStationVo 工作站VO
     * @return
     * @throws Exception
     */
    boolean saveWorkStationFrom(ParkWorkStationVo parkWorkStationVo) throws Exception;

    /**
     * 编辑工作站
     *
     * @param parkWorkStationVo 工作站VO
     * @return
     * @throws Exception
     */
    boolean updateWorkStationFrom(ParkWorkStationVo parkWorkStationVo) throws Exception;

    /**
     * 删除工作站
     *
     * @param id 工作站id
     * @return
     * @throws Exception
     */
    boolean removeWorkStationFrom(String id) throws Exception;

    /**
     * 批量删除工作站
     *
     * @param asList 工作站id
     * @throws Exception
     */
    void removeWorkStationFroms(List<String> asList) throws Exception;

    /**
     * 查询某个工作站
     *
     * @param id 工作站id
     * @return
     */
    ParkWorkStationVo getWorkStationFrom(String id);

    /**
     * 得到未使用得工作站信息
     *
     * @return 工作站信息
     */
    List<ParkWorkStation> noUseWorkStation();

    /**
     * 岗亭登录后绑定工作站
     *
     * @param parkWorkStation 工作站
     * @return
     * @throws Exception
     */
    Result<?> bindWorkStation(ParkWorkStation parkWorkStation) throws Exception;

    /**
     * 删除前查询状态
     *
     * @param id 主键
     * @return
     */
    boolean beforeDelete(String id);

    /**
     * 从车道信息查询工作站从而查询查询工作站得值班人
     *
     * @param parkArmInfo 车道信息
     * @return
     */
    String getStationOperationNameByParkArm(ParkArmInfo parkArmInfo);

    /**
     * 获取车道信息并处理名字
     *
     * @return
     */
    List<ParkArmInfo> getParkArmInfos();

    /**
     * 判断当前用户是否已经选过工作站
     *
     * @return
     * @throws Exception
     */
    boolean checkStationAuth() throws Exception;

    /**
     * 设置workstation status为0
     *
     * @return
     */
    boolean initStationStatus();

    /**
     * 岗亭登录后无需选择工作站
     *
     * @return
     * @throws Exception
     */
    Result<?> bindWorkStationNoSelect() throws Exception;
}
